home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / SCIENTIF / 1225.ZIP / BIRDFACE.PAS < prev    next >
Pascal/Delphi Source File  |  1987-05-13  |  5KB  |  200 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. PROGRAM BIRDFACE;          { You can experiment with new multipliers  }
  8.                            { or variable values & see what happens.   }
  9.  
  10. CONST
  11.   MemorySize = 150;
  12.  
  13. VAR
  14.   X1, X2, Y1, Y2,
  15.   CURRENTLINE,
  16.   COLORCOUNT,
  17.   INCREMENTCOUNT,
  18.   DELTAX1, DELTAY1, DELTAX2, DELTAY2,
  19.   I, COLOR                                                        : INTEGER;
  20.  
  21.   CH                                                              : CHAR;
  22.  
  23.   LINE                                      : ARRAY [1..MemorySize] OF RECORD
  24.                                     LX1, LY1: integer;
  25.                                     LX2, LY2: integer;
  26.                                     LCOLOR  : integer;
  27.                                                   end;
  28.  
  29.  
  30. PROCEDURE CHECKIT;
  31.  
  32.   VAR
  33.     CH: CHAR;
  34.  
  35.   BEGIN
  36.     WRITE('     ');
  37.     WRITELN
  38.   ('This Program Wants a Color Graphics Card - Don''t Leave Home Without It!');
  39.     WRITELN;
  40.     WRITE('     ');
  41.     WRITELN
  42.   ('Peck the Esc key to return to Labcoat Program when tired of graphics');
  43.     WRITELN;
  44.     WRITELN;
  45.     WRITE('                         Continue Y/N ');
  46.       REPEAT
  47.         READ(KBD,CH)
  48.       UNTIL UPCASE(CH) IN ['Y','N', #27];  {     note another way of setting  }
  49.       IF UPCASE(Ch) IN ['N', #27] THEN     { uppercase and INcluding specific }
  50.       HALT;                                { key calls to initiate - for some }
  51.   END;                                     { clumsier examples of different   }
  52.                                            { ways, see LABCOAT.PAS source     }
  53.  
  54. PROCEDURE INITIALIZE;                      { set initial values to 0 }
  55.  
  56.   BEGIN
  57.     FOR I:= 1 TO MemorySize DO
  58.     WITH LINE[I] DO
  59.       BEGIN
  60.         LX1 := 0;
  61.         LX2 := 0;
  62.         LY1 := 0;
  63.         LY2 := 0;
  64.       END;
  65.     X1 := 0;
  66.     Y1 := 0;
  67.     X2 := 0;
  68.     Y2 := 0;
  69.     CURRENTLINE:= 1;
  70.     COLORCOUNT:= 0;
  71.     INCREMENTCOUNT:= 0;
  72.     CH := ' ';
  73.     GRAPHCOLORMODE;
  74.     PALETTE(2);
  75.     COLOR:= 2;
  76.   END;
  77.  
  78. PROCEDURE ADJUSTX (VAR X,DELTAX: INTEGER);
  79.   VAR
  80.     TESTX: INTEGER;
  81.   BEGIN
  82.     TESTX := X+DELTAX;
  83.       IF (TESTX < 1) OR (TESTX > 310) THEN
  84.         BEGIN
  85.           TESTX  := X;
  86.           DELTAX := -DELTAX;
  87.         END;
  88.  
  89.     X := TESTX;
  90.   END;
  91.  
  92. PROCEDURE ADJUSTY (VAR Y,DELTAY: INTEGER);
  93.   VAR
  94.     TESTY: INTEGER;                          { A testy variable }
  95.   BEGIN
  96.     TESTY := Y+DELTAY;
  97.     IF (TESTY < 1) OR (TESTY > 200) THEN
  98.       BEGIN
  99.         TESTY  := Y;
  100.         DELTAY := -DELTAY;
  101.       END;
  102.     Y:= TESTY;                                { Y gets testy too }
  103.   END;
  104.  
  105. PROCEDURE GETnewCOLOR;
  106.   BEGIN
  107.     COLOR      := RANDOM(3)+1;
  108.     COLORCOUNT := 7*(1 + RANDOM(10));
  109.   END;
  110.  
  111. PROCEDURE GETnewDELTAvalues;
  112.   BEGIN
  113.     DELTAX1 := RANDOM(7)-3;
  114.     DELTAX2 := RANDOM(7)-3;
  115.     DELTAY1 := RANDOM(7)-3;
  116.     DELTAY2 := RANDOM(7)-3;
  117.     INCREMENTCOUNT := 8*(1 + RANDOM(9));
  118.   END;
  119.  
  120. PROCEDURE SAVEtheCURRENTline;
  121.   BEGIN
  122.     WITH LINE[CURRENTline] DO
  123.       BEGIN
  124.         LX1 := X1;
  125.         LY1 := Y1;
  126.         LX2 := X2;
  127.         LY2 := Y2;
  128.         LCOLOR := COLOR;
  129.       END;
  130.   END;
  131.  
  132. PROCEDURE RENEWSIT;
  133.   VAR
  134.     I: INTEGER;
  135.   BEGIN
  136.     NOSOUND;
  137.     GRAPHCOLORMODE;
  138.     PALETTE(2);
  139.       FOR I := 1 TO MemorySize DO
  140.         WITH LINE[I] DO
  141.          DRAW(LX1,LY1,LX2,LY2,LCOLOR);
  142.          READ(KBD,CH);
  143.   END;
  144.  
  145. PROCEDURE FLYINGBIRDFACE;
  146.   BEGIN
  147.     REPEAT
  148.       REPEAT
  149.         WITH LINE[CURRENTLINE] DO
  150.           DRAW(LX1,LY1,LX2,LY2,0);
  151.  
  152.         IF COLORCOUNT     = 0 THEN GETnewCOLOR;
  153.         IF INCREMENTCOUNT = 0 THEN GETnewDELTAVALUES;
  154.  
  155.         ADJUSTX(X1,DELTAX1);
  156.         ADJUSTY(Y1,DELTAY1);
  157.         ADJUSTX(X2,DELTAX2);
  158.         ADJUSTY(Y2,DELTAY2);
  159.  
  160.         DRAW(X1,Y1,X2,Y2,COLOR);
  161.  
  162.         SAVEtheCURRENTline;
  163.  
  164.         CURRENTLINE := SUCC(CURRENTLINE);          { the successor value }
  165.  
  166.           IF CURRENTLINE > MEMORYSIZE THEN CURRENTLINE := 1;
  167.  
  168.         COLORCOUNT     := PRED(COLORCOUNT);        { the predecessor value }
  169.         INCREMENTCOUNT := PRED(INCREMENTCOUNT);
  170.       UNTIL KEYPRESSED;
  171.       READ(KBD,CH);
  172.         IF CH <> #27 THEN
  173.           BEGIN
  174.             RENEWSIT;
  175.           END;
  176.     UNTIL CH = #27;
  177.   END;
  178.  
  179. PROCEDURE CYBERPUNK;                       { When Escape Pecked, goto LABCOAT }
  180.  VAR
  181.     LABCOAT:FILE;
  182.  
  183.   BEGIN
  184.     ASSIGN(LABCOAT,'LABCOAT.COM');
  185.     EXECUTE(LABCOAT);                       { you better have LABCOAT around }
  186.   END;                                      { else just end program instead. }
  187.  
  188.  
  189.  
  190. BEGIN                                 { MAIN CODE SECTION }
  191.   GRAPHBACKGROUND(1);
  192.   TEXTBACKGROUND(1);
  193.   CLRSCR;
  194.   CHECKIT;
  195.   INITIALIZE;
  196.   FLYINGBIRDFACE;
  197.   TEXTMODE;
  198.   CYBERPUNK;
  199. END.
  200.